﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tibet.Datos.Interfaces;
using System.Data.SqlClient;
using Tibet.Entidades;
using Tibet.Datos.FabricaDatos;
using Tibet.Datos.DaosSqlServer;
using System.Data;


namespace Tibet.Datos.DaosSqlServer
{
    public class DaoSqlServerAccesoCliente:IDaoAccesoCliente
    {
        
        IDaoAccesoConexion bd = FabricaConexion.DaoSqlServerAccesoConexion();

        public DaoSqlServerAccesoCliente()
        { 
        
        }

        
        public List<Cliente> ConsultarClientes()
        {
            //Conexion bd = new Conexion();
            //Boolean respuestaQuery = false;
            List<Cliente> listaClientes = new List<Cliente>();
            SqlCommand command = new SqlCommand();

            try
            {


                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[SELTodosClientes]";
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Cliente cliente = new Cliente();
                    //cliente.Status = reader.GetInt32(0);
                    //cliente.Nombre = reader.getstring(1);
             
                    listaClientes.Add(cliente);
                }
                return listaClientes;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        /// <summary>
        /// Busca si el nombre que recibe existe y de ser asi devuelve true
        /// </summary>
        /// <returns>Objeto Conexion Inicializado</returns>
        public Cliente ExisteClienteEnBd(String nombre)
        {
           // Conexion bd = InstanciarConexion();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[BuscarCliente]";
                command.CommandTimeout = 10;

                command.Parameters.AddWithValue("@Cliente", nombre);

                SqlDataReader reader = command.ExecuteReader();

                Cliente cliente = null;
                if (reader.Read())
                    cliente = new Cliente( reader[ 0 ].ToString() );

                reader.Close();
                bd.CerrarConexionBd();
                return cliente;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }




        }

        /// <summary>
        /// Este metodo inserta el cliente el la bd
        /// </summary>
        /// <returns>Objeto Conexion Inicializado</returns>
        public bool InsertarCliente(String nombre)
        {

            
            //Conexion bd = InstanciarConexion();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[CrearCliente]";
                command.CommandTimeout = 10;

                command.Parameters.AddWithValue("@Cliente", nombre);

                SqlDataReader reader = command.ExecuteReader();




                return true;


                reader.Close();
                bd.CerrarConexionBd();
                return false;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return false;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return false;
            }




        }

        /// <summary>
        /// Este metodo busca el cliente
        /// </summary>

        public DataTable BuscarCliente(String nombre)
        {
            //Conexion bd = InstanciarConexion();
            SqlCommand command = new SqlCommand();
            DataTable tabla = new DataTable();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[BuscarCliente]"; 
                command.CommandTimeout = 10;

                command.Parameters.AddWithValue("@Cliente", nombre);

                SqlDataReader reader = command.ExecuteReader();

                tabla.Load(reader);


                return tabla;

                reader.Close();
                bd.CerrarConexionBd();

            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();

            }

            catch (Exception)
            {
                bd.CerrarConexionBd();

            }


            return tabla;

        }

        public bool ModificarCliente(Cliente cliente, String nombreViejo)
        {
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[UPDCliente]";
                command.CommandTimeout = 10;
                
                command.Parameters.AddWithValue("@NombreNuevo", cliente.Nombre);
                command.Parameters.AddWithValue("@NombreViejo",nombreViejo);

                SqlDataReader reader = command.ExecuteReader();

                reader.Close();
                bd.CerrarConexionBd();
                return true;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return false;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return false;
            }




        }


    }
}
